/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;


import Entidades.ObjetoAprendizajeEnt;
import Utilidades.Conexion;
import Utilidades.Constantes;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author usuario
 */
public class ObjetoAprendizajeDAO {
        
        Conexion con;
        Connection connect;
        
        public List<ObjetoAprendizajeEnt> busquedaTOPObjetos() throws SQLException{
    
         List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
         ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSQUEDA_TOP);
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("NOMBRE_TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }

        return lstObjetoAprendizaje;
    }
        
        
     public int ingresarObjetoAprendizaje(ObjetoAprendizajeEnt objAprendizaje, int idUsuario) throws SQLException{
             
             con = new Conexion();
             connect = con.getCon();
             int guardado = 0;
             
             try {
                 
                    PreparedStatement st = connect.prepareStatement(Constantes.INSERTAR_OBJETO_APRENDIAJE);
                    
                    st.setString(1, objAprendizaje.getNombre());
                    st.setString(2, objAprendizaje.getObjetivoGeneral());
                    st.setString(3, objAprendizaje.getObjetivoEspecifico());
                    st.setString(4, objAprendizaje.getResumen());
                    st.setInt(5, objAprendizaje.getAutor().getCodigo());
                    st.setInt(6, objAprendizaje.getMetadatos().getCodigo());
                    st.setInt(7, Integer.parseInt(objAprendizaje.getTema().getCodigo()));
                    st.setString(8, objAprendizaje.getURL());
                    st.setString(9, objAprendizaje.getRutaArchivo());
                    st.setString(10, objAprendizaje.getTipo());
                    st.setInt(11, idUsuario);
                    
                    st.executeQuery();
                    guardado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
        
             return guardado;  
             
        }
        
     public List<ObjetoAprendizajeEnt> busquedaObjetos(String metadato) throws SQLException{
    
        List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
        ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_OBJETO_APRENDIAJE);
            
            st.setString(1, metadato);
            st.setString(2, metadato);
            st.setString(3, metadato);
            st.setString(4, metadato);
            st.setString(5, metadato);
            st.setString(6, metadato);
            st.setString(7, metadato);
            st.setString(8, metadato);
            st.setString(9, metadato);
            st.setString(10, metadato);
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("NOMBRE_TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    objAprend.setTipo(rs.getString("TIPO"));
                    objAprend.getUsuario().setNombre(rs.getString("NOMBRE_USUARIO"));
                    
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }

        return lstObjetoAprendizaje;
    }
        
    public ObjetoAprendizajeEnt busquedaObjetosPorId(String id) throws SQLException{
    

        ObjetoAprendizajeEnt objAprend = new ObjetoAprendizajeEnt();
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_OBJETO_POR_ID);
            
            st.setInt(1, Integer.parseInt(id));
   
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.setObjetivoEspecifico(rs.getString("OBJETIVO_ESPECIFICO"));
                    objAprend.setResumen(rs.getString("RESUMEN"));
                    objAprend.getEstado().setCodigo(rs.getInt("ESTADO"));
                    objAprend.getAutor().setCodigo(rs.getInt("AUTOR"));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    objAprend.getAutor().setStrFechaRealizacion(rs.getString("FECHA_REAL"));
                    objAprend.setStrFechaRealizacion(rs.getString("FECHA_REALIZACION"));
                    objAprend.getTema().setNombre(rs.getString("TEMA"));
                    objAprend.setNumeroVisitas(rs.getInt("NUMERO_VISITAS"));
                    objAprend.getMetadatos().setCodigo(rs.getInt("METADATOS"));
                    objAprend.getTema().setCodigo(rs.getString("TEMA"));
                    objAprend.getTema().setNombre(rs.getString("NOMBRE_TEMA"));
                    objAprend.setURL(rs.getString("URL"));
                    objAprend.setTipo(rs.getString("TIPO"));
                    objAprend.setRutaArchivo(rs.getString("RUTA_OBJETO"));
                    
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }

        return objAprend;
    }    
    
    
      public int ingresarFavorito(int idUsuario, int idObjeto) throws SQLException{
             
             con = new Conexion();
             connect = con.getCon();
             int guardado = 0;
             
             try {
                 
                    PreparedStatement st = connect.prepareStatement(Constantes.AGREGAR_FAVORITO);
                    
                    st.setInt(1, idUsuario);
                    st.setInt(2, idObjeto);

                    st.executeUpdate();
                    guardado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
             
             return guardado;  
             
        }
      
      
     public List<ObjetoAprendizajeEnt> busquedaFavoritosObjetos(int idUsuario) throws SQLException{
    
        List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
        ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.FAVORITOS_POR_USUARIO);
            
            st.setInt(1, idUsuario);

            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return lstObjetoAprendizaje;
    }
     
    public List<ObjetoAprendizajeEnt> busquedaObjetosTemporales() throws SQLException{
    
         List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
         ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.TEMPORALES);
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return lstObjetoAprendizaje;
    }

      public List<ObjetoAprendizajeEnt> busquedaTemporalesObjetos(String fechaInicio, String fechaFin) throws SQLException{
    
        List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
        ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_POR_FECHAS);
            
            st.setString(1, fechaInicio);
            st.setString(2, fechaFin);

            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }
        
        return lstObjetoAprendizaje;
    }
      
      
     public int eliminarObjeto(int idObjeto) throws SQLException{
             
             ObjetoAprendizajeEnt obj = this.busquedaObjetosPorId(idObjeto + "");

             Conexion conec =new Conexion();
             Connection connection = conec.getCon();
           
           
             int eliminado = 0;
             
             try {
                 
                    PreparedStatement st = connection.prepareStatement(Constantes.ELIMNAR_OBJETO);              
                    st.setInt(1, idObjeto);
                    st.executeUpdate();
                    
                    PreparedStatement st1 = connection.prepareStatement(Constantes.ELIMNAR_OBJETO1);
                    st1.setInt(1, idObjeto);
                    st1.executeUpdate();
                    
                    PreparedStatement st2 = connection.prepareStatement(Constantes.ELIMNAR_OBJETO2); 
                    st2.setInt(1, obj.getMetadatos().getCodigo());
                    st2.executeUpdate();
                    
                    eliminado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
             
             return eliminado;  
             
        }
     
          public int aprobado(int idObjeto) throws SQLException{
             
             con = new Conexion();
             connect = con.getCon();
             int aprobado = 0;
             
             try {
                 
                    PreparedStatement st = connect.prepareStatement(Constantes.APROBAR_OBJETO);
                    
                    st.setInt(1, idObjeto);

                    st.executeUpdate();
                    aprobado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
             
             return aprobado;  
             
        }
          
        public int actualizarObjetoAprendizaje(ObjetoAprendizajeEnt objAprendizaje) throws SQLException{
             
             con = new Conexion();
             connect = con.getCon();
             int actualizado = 0;
             
             try {
                 
                    PreparedStatement st = connect.prepareStatement(Constantes.ACTUALIZAR_OBJETO_APRENDIZAJE);
                    
                    st.setString(1, objAprendizaje.getNombre());
                    st.setString(2, objAprendizaje.getObjetivoGeneral());
                    st.setString(3, objAprendizaje.getObjetivoEspecifico());
                    st.setString(4, objAprendizaje.getResumen());
                    st.setInt(5, Integer.parseInt(objAprendizaje.getTema().getCodigo()));
                    st.setInt(6, objAprendizaje.getCodigo());
                    
                    st.executeUpdate();
                    actualizado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
             
             return actualizado;  
             
        }
          
       
        public int numeroVisitas(int idObjeto) throws SQLException{
             
             con = new Conexion();
             connect = con.getCon();
             int actualizado = 0;
             
             try {
                 
                    PreparedStatement st = connect.prepareStatement(Constantes.NUMERO_VISITAS);
                    
                    st.setInt(1, idObjeto);

                    st.executeUpdate();
                    actualizado = 1;
                    connect.close();
            } catch (SQLException ex) {
                Logger.getLogger(ObjetoAprendizajeDAO.class.getName()).log(Level.SEVERE, null, ex);
                connect.close();
            }
             
             return actualizado;  
             
        }
        
        
      public List<ObjetoAprendizajeEnt> busquedaPorTemaObjetos(String tema) throws SQLException{
    
        List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
        ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_POR_TEMA);
            
            st.setString(1, tema);
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("NOMBRE_TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    objAprend.setTipo(rs.getString("TIPO"));
                    objAprend.getUsuario().setNombre(rs.getString("NOMBRE_USUARIO"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }

        return lstObjetoAprendizaje;
    }
    
      
    public List<ObjetoAprendizajeEnt> busquedaPorAutorObjetos(String autor) throws SQLException{
    
        List<ObjetoAprendizajeEnt>  lstObjetoAprendizaje = new ArrayList<ObjetoAprendizajeEnt>();
        ObjetoAprendizajeEnt objAprend;
        con = new Conexion();
        connect = con.getCon();
 
        try {
            
            PreparedStatement st = connect.prepareStatement(Constantes.BUSCAR_POR_AUTOR);
            
            st.setString(1, autor);
            
            ResultSet rs = st.executeQuery();
            
            if(rs != null){
                while (rs.next()) {
                    
                    objAprend = new ObjetoAprendizajeEnt();
                    objAprend.setCodigo(Integer.parseInt(rs.getString("CODIGO")));
                    objAprend.setNombre(rs.getString("NOMBRE"));
                    objAprend.setObjetivoGeneral(rs.getString("OBJETIVO_GENERAL"));
                    objAprend.getTema().setNombre(rs.getString("NOMBRE_TEMA"));
                    objAprend.setNumeroVisitas(Integer.parseInt(rs.getString("NUMERO_VISITAS")));
                    objAprend.getAutor().setNombre(rs.getString("NOMBRE_AUTOR"));
                    objAprend.setTipo(rs.getString("TIPO"));
                    objAprend.getUsuario().setNombre(rs.getString("NOMBRE_USUARIO"));
                    
                    lstObjetoAprendizaje.add(objAprend);
                }
            }
            connect.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            connect.close();
        }

        return lstObjetoAprendizaje;
    }
}
